# 可以把函数作为结果值返回
def big_sum(*numbers):
    def sum():
        result = 0
        for number in numbers:
            result = result + number
        return result
    return sum


# 返回的不是结果,而是函数本身
print(big_sum(1, 2, 3, 4, 5, 6, 7, 8))

f = big_sum(1, 2, 3, 4, 5, 6, 7, 8)
print(f())

# 函数中的相关参数和变量都保存在返回的函数中,叫做闭包(Closure)

# 每次调用都返回一个新的函数,下面的两个函数是不同的
fOne = big_sum(1, 2, 3, 4, 5)
fTwo = big_sum(1, 2, 3, 4, 5)
print(fOne == fTwo)

# 闭包
# 特别注意,返回函数不要引用任何循环变量，或者后续会发生变化的变量
